package singleton;

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;

public class demo6 {
    /**
     * 简单的生产者-消费者模式
     * 一个线程表示生产者
     * 一个线程表示消费者
     * 搞一个阻塞队列, 生产者往里面放数据, 消费者从里面取数据
     * 阻塞队列的实现类有: ArrayBlockingQueue, LinkedBlockingQueue, PriorityBlockingQueue
     * 阻塞队列的put和take方法会阻塞
     * @param args
     */
    public static void main(String[] args) {
        BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(1000);

        // 生产者
        Thread t1 = new Thread(() -> {
           int n = 0;
           while (true) {
               try {
                   queue.put(n);
                   System.out.println("生产了: " + n);
                   n++;
//                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   throw new RuntimeException(e);
               }

           }
        });

        // 消费者
        Thread t2 = new Thread(() -> {
           int n = 0;
           while (true) {
               try {
                   n = queue.take();
                   System.out.println("消费了: " + n);
                   n++;
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   throw new RuntimeException(e);
               }

           }
        });

        t1.start();
        t2.start();
    }
}
